"use client"

import type { Variants } from "framer-motion"
import { AnimatePresence, motion } from "framer-motion"
import { ny } from "~/lib/utils"

interface GradualSpacingProps {
   text: string
   duration?: number
   delayMultiple?: number
   framerProps?: Variants
   className?: string
}

export default function GradualSpacing({
   text,
   duration = 0.5,
   delayMultiple = 0.04,
   framerProps = {
      hidden: { opacity: 0, x: -20 },
      visible: { opacity: 1, x: 0 },
   },
   className,
}: GradualSpacingProps) {
   return (
      <div className="flex justify-center space-x-1">
         <AnimatePresence>
            {text.split("").map((char, i) => (
               <motion.h1
                  key={i}
                  initial="hidden"
                  animate="visible"
                  exit="hidden"
                  variants={framerProps}
                  transition={{ duration, delay: i * delayMultiple }}
                  className={ny("drop-shadow-sm ", className)}
               >
                  {char === " " ? <span>&nbsp;</span> : char}
               </motion.h1>
            ))}
         </AnimatePresence>
      </div>
   )
}
